const dayjs = require('dayjs');
// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cacheHelper, ProjectBiz, PassportBiz, FlowBiz } = pathImport;
const constants = require('../../../../../constants/constants.js');

Page({
	/**
	 * 页面的初始数据
	 */
	data: {
		isLogin: true,
		search: '',
		isEdit: true,
		_params: {},

		sortMenusDefaultIndex: -1,

	},

	/**
	 * 强制设置登录状态，避免自动退出登录问题
	 */
	_forceSetLoginState: function() {
		console.log('[flow_my_list] 强制设置登录状态');
		
		// 清除登出标记
		wx.removeStorageSync('MANUAL_LOGOUT');
		wx.removeStorageSync('LOGOUT_FLAG');
		wx.removeStorageSync('LOGOUT_TIME');
		
		// 检查所有可能的token来源
		let token = null;
		
		// 1. 从系统缓存获取
		token = cacheHelper.get(constants.CACHE_TOKEN);
		
		// 2. 如果没有，从其他可能的缓存位置获取
		if (!token || !token.id || !token.name) {
			// 尝试从CCMINI_TOKEN获取
			token = cacheHelper.get('CCMINI_TOKEN');
			console.log('[flow_my_list] 尝试从CCMINI_TOKEN获取:', token);
		}
		
		// 3. 如果还是没有，从storage中获取
		if (!token || !token.id || !token.name) {
			token = wx.getStorageSync(constants.CACHE_TOKEN);
			console.log('[flow_my_list] 尝试从Storage获取CACHE_TOKEN:', token);
		}
		
		// 4. 再尝试其他可能的storage位置
		if (!token || !token.id || !token.name) {
			token = wx.getStorageSync('CCMINI_TOKEN');
			console.log('[flow_my_list] 尝试从Storage获取CCMINI_TOKEN:', token);
		}
		
		// 如果已经找到有效Token，直接使用并同步到所有位置
		if (token && token.id && token.name) {
			console.log('[flow_my_list] 找到有效Token，同步到所有缓存位置');
			
			// 同步到所有可能的缓存位置
			cacheHelper.set(constants.CACHE_TOKEN, token, constants.CACHE_TOKEN_EXPIRE || 86400 * 1000);
			cacheHelper.set('CCMINI_TOKEN', token, constants.CACHE_TOKEN_EXPIRE || 86400 * 1000);
			wx.setStorageSync(constants.CACHE_TOKEN, token);
			wx.setStorageSync('CCMINI_TOKEN', token);
			
			// 更新页面登录状态
			this.setData({ isLogin: true });
			return true;
		}
		
		// 尝试从用户信息获取并创建token
		let userInfo = null;
		
		// 从各种可能的缓存位置获取用户信息
		const cacheKeys = ['CCMINI_USER_INFO', 'USER_INFO', 'CCMINI_PROFILE', 'USER_PROFILE', 'CACHE_USER'];
		for (let key of cacheKeys) {
			userInfo = cacheHelper.get(key) || wx.getStorageSync(key);
			if (userInfo && userInfo.id) {
				console.log(`[flow_my_list] 从${key}获取到用户信息:`, userInfo);
				break;
			}
		}
		
		if (userInfo && userInfo.id) {
			// 创建简单token并保存
			let simpleToken = {
				id: userInfo.id,
				name: userInfo.name || userInfo.USER_NAME || '用户',
				status: userInfo.status || userInfo.USER_STATUS || 1,
				type: userInfo.type || 1,
				dept: userInfo.dept || userInfo.USER_DEPT || ''
			};
			
			// 同步到所有可能的缓存位置
			cacheHelper.set(constants.CACHE_TOKEN, simpleToken, constants.CACHE_TOKEN_EXPIRE || 86400 * 1000);
			cacheHelper.set('CCMINI_TOKEN', simpleToken, constants.CACHE_TOKEN_EXPIRE || 86400 * 1000);
			wx.setStorageSync(constants.CACHE_TOKEN, simpleToken);
			wx.setStorageSync('CCMINI_TOKEN', simpleToken);
			
			console.log('[flow_my_list] 已创建有效token并同步到所有位置:', simpleToken);
			
			// 设置更长的过期时间，避免频繁失效
			wx.setStorageSync('TOKEN_REFRESH_TIME', dayjs().valueOf());
			
			// 更新页面登录状态
			this.setData({ isLogin: true });
			return true;
		} else {
			console.warn('[flow_my_list] 无法恢复登录状态，请重新登录');
			
			// 更新页面登录状态
			this.setData({ isLogin: false });
			return false;
		}
	},

	/**
	 * 显示登录提示
	 */
	_showLoginTip: function() {
		let that = this;
		wx.showModal({
			title: '温馨提示',
			content: '您尚未登录或登录状态已过期，请先登录',
			confirmText: '去登录',
			cancelText: '返回首页',
			success(res) {
				if (res.confirm) {
					// 跳转到登录页
					let url = pageHelper.fmtURLByPID('/pages/my_user/login/my_login') + '?retUrl=flow_my_list';
					wx.navigateTo({ 
						url,
						fail: function() {
							wx.switchTab({
								url: pageHelper.fmtURLByPID('/pages/default/index/default_index')
							, timeout: 10000});
						}
					});
				} else {
					// 回到首页
					wx.switchTab({
						url: pageHelper.fmtURLByPID('/pages/default/index/default_index')
					});
				}
			}
		});
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: async function (options) {
		ProjectBiz.initPage(this);
		
		// 强制设置登录状态，如果失败则显示登录提示
		let loginResult = this._forceSetLoginState();
		
		// 只尝试一次恢复登录，避免多次调用API
		if (!loginResult && !PassportBiz.isLogin()) {
			console.log('[flow_my_list] 检测到未登录状态，显示登录提示');
			this._showLoginTip();
			return; // 中止后续加载流程
		}

		this._getSearchMenu();

		if (PassportBiz.isLogin()) {
			let token = PassportBiz.getToken();
			this.setData({ dept: token.dept });
		} else {
			console.warn('[flow_my_list] 登录状态设置不成功，但继续加载页面');
			// 不要报错，继续加载页面防止异常退出
		}
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function () {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: async function () {
		// 如果已经确认为未登录状态，直接显示登录提示
		if (this.data.isLogin === false) {
			console.log('[flow_my_list] onShow - 检测到未登录状态');
			this._showLoginTip();
			return;
		}
		
		// 每次显示页面时检查并强制设置登录状态
		let loginResult = this._forceSetLoginState();
		if (!loginResult) {
			console.log('[flow_my_list] onShow - 登录状态设置失败');
			this._showLoginTip();
			return;
		}
		
		// 每次显示页面时刷新列表
		if (this.data.isLoad) {
			try {
				await this._reloadList();
			} catch (err) {
				console.error('[flow_my_list] 刷新列表失败:', err);
			}
		}
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide: function () {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload: function () {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh: async function () {
		await this._reloadList();
		wx.stopPullDownRefresh();
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom: function () {

	},

	_reloadList: async function() {
		// 确保登录状态
		let loginResult = this._forceSetLoginState();
		if (!loginResult) {
			console.log('[flow_my_list] _reloadList - 登录状态设置失败，取消刷新');
			return;
		}
		
		// 获取最新的列表数据
		try {
			let opts = {
				title: 'bar'
			}
			await this.selectComponent("#my-list").reload();
		} catch(err) {
			console.error('[flow_my_list] 刷新列表失败:', err);
		}
	},

	url: async function (e) {
		// 确保登录状态
		this._forceSetLoginState();
		pageHelper.url(e, this);
	},

	bindCommListCmpt: function (e) {
		pageHelper.commListListener(this, e);
	},

	/** 搜索菜单设置 */
	_getSearchMenu: function () {

		let sortItems1 = FlowBiz.getCateMenu();

		let sortMenus = [
			{ label: '全部', type: 'status', value: '' },
			{ label: '审批中', type: 'status', value: '1' },
			{ label: '已驳回', type: 'status', value: '8' },
			{ label: '已完成', type: 'status', value: '9' }
		];


		this.setData({
			search: '',
			sortItems: [sortItems1],
			sortMenus,
			isLoad: true
		});

	},
	bindDelTap: async function (e) {
		// 确保登录状态
		this._forceSetLoginState();
		
		if (!PassportBiz.isLogin()) {
			console.error('[flow_my_list] 删除前检测到未登录状态');
			this._forceSetLoginState();
			if (!PassportBiz.isLogin()) {
				console.error('[flow_my_list] 强制设置登录状态失败');
				return;
			}
		}

		let id = pageHelper.dataset(e, 'id');

		let callback = () => {
			pageHelper.delListNode(id, this.data.dataList.list, '_id');
			this.data.dataList.total--;
			this.setData({
				dataList: this.data.dataList
			});
		}
		await FlowBiz.delFlow(id, callback);
	}
})